package abrindoojogo.exemplos.thread;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferStrategy;
import javax.swing.JFrame;

public class Renderizador implements Runnable
{
    BufferStrategy bs;
    Contador contador;
    JFrame frame;
    Nave nave;
    public boolean terminado = false;

    public Renderizador(JFrame frame, BufferStrategy bs, Contador contador, Nave nave)
    {
	this.frame = frame;
	this.bs = bs;
	this.contador = contador;
	this.nave = nave;
    }

    public void run()
    {
	long PULSOS_DESEJADOS_POR_SEGUNDO = 30;
	double NANOS_ESPERADOS_POR_PULSO = Contador.NANOS_EM_UM_SEGUNDO / PULSOS_DESEJADOS_POR_SEGUNDO;
	long nanoTimeDoProximoPulso = System.nanoTime();
	while (!terminado)
	{
	    while (System.nanoTime() > nanoTimeDoProximoPulso)
	    {
		render();
		nanoTimeDoProximoPulso += NANOS_ESPERADOS_POR_PULSO;
	    }
	    try
	    {
		Thread.sleep(10);
	    } catch (Exception e)
	    {
	    }
	}
    }

    public void render()
    {
	contador.contaFrame();
	Graphics2D g = (Graphics2D) bs.getDrawGraphics();
	g.setColor(Color.black);
	g.fillRect(0, 0, frame.getWidth(), frame.getHeight());
	int x = nave.x;
	int y = nave.y;
	for (int i = 0; i < nave.qtd; i++)
	{
	    g.setColor(Color.yellow);
	    g.drawLine(x, y, x - 20, y - 5);
	    g.drawLine(x, y, x - 20, y + 5);
	    g.drawLine(x - 20, y - 5, x - 20, y + 5);
	    y += 15;
	    if (y > 550)
	    {
		y = nave.y;
		x += 15;
	    }
	}
	g.setColor(Color.white);
	g.drawString("Pulsos: " + contador.getPulsosPorSegundo() + "  Frames: " + contador.getFramesPorSegundo() + "          naves: " + nave.qtd, 10, 20);
	g.dispose();
	bs.show();
    }
}
